Convert Sorted List to Binary Search Tree (递增的链表转化成高度平衡的二叉查找树)【leetcode】

题目:Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST

给一个递增的链表,转化成高度平衡的二叉查找树。

先遍历一边算出链表的个数,在递归求解。

注意就是左右字数划分的范围,还有右子树的头指针需要求出。


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode *sortedListToBST(ListNode *head) {
        int n=0;
        ListNode *p=head;
        while(p!=NULL)n++,p=p->next;
        return build(head,n);        
    }
    TreeNode *build(ListNode *head,int n)
    {
        if(head==NULL||n==0)return NULL;
        ListNode *p=head;
        for(int i=1;i<(n+1)/2;++i)p=p->next;
        TreeNode *root=new TreeNode(p->val);
        root->left=build(head,(n+1)/2-1);
        root->right=build(p->next,n-(n+1)/2);
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Python 中的 sortedcontainers 模块来实现将整数列表转换为平衡二叉查找树,并以数组形式返回结果树。具体实现方法可以参考以下代码: ```python from sortedcontainers import SortedList def sorted_list_to_bst(nums): if not nums: return [] mid = len(nums) // 2 root = [nums[mid]] root.extend(sorted_list_to_bst(nums[:mid])) root.extend(sorted_list_to_bst(nums[mid+1:])) return root def sorted_list_to_bst_array(nums): sl = SortedList(nums) bst = sorted_list_to_bst(sl) return bst ``` 其中,sorted_list_to_bst 函数用于将 SortedList 转换为平衡二叉查找树sorted_list_to_bst_array 函数则将结果树转换为数组形式返回。 ### 回答2: 使用Python中的二叉树库,可以将整数列表转换为平衡二叉查找树。下面是实现的代码: ```python from binarytree import build def convert_to_bst(nums): # 构建平衡二叉查找树 tree = build(nums) # 将树转换为数组形式返回结果 result = tree.values return result # 测试示例 nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] result = convert_to_bst(nums) print(result) ``` 输出结果为:[6, 3, 9, 2, 5, 8, 10, 1, None, 4, 7, None, None, None, None]。 ### 回答3: 平衡二叉查找树(Balanced Binary Search Tree)也被称为AVL树,它是一种保持平衡二叉查找树结构。在Python中,我们可以使用递归方法将整数列表转换为平衡二叉查找树,并将结果以数组形式返回。 首先,我们需要定义一个树节点的类,用于表示树的每个节点。节点类中需要包含一个值属性、以及左右子节点属性。 接下来,我们可以编写一个方法,将整数列表转换为平衡二叉查找树。该方法可以采用以下步骤: 1. 首先,判断列表是否为空。如果为空,则返回空树。 2. 如果列表不为空,找到列表的中间元素作为根节点的值。 3. 将中间元素左边的部分作为左子列表,右边的部分作为右子列表。 4. 递归调用方法,将左子列表转换为左子树,将右子列表转换为右子树。 5. 将左子树和右子树分别作为根节点的左右子节点。 6. 返回根节点。 最后,我们可以编写一个方法,将平衡二叉查找树按照数组形式返回。该方法可以采用中序遍历的方式,先遍历左子树,再遍历根节点,最后遍历右子树。在遍历过程中,将每个节点的值存入数组中。 以下是一个示例代码: ```python class TreeNode: def __init__(self, value): self.value = value self.left = None self.right = None def list_to_bst(nums): if not nums: return None mid = len(nums) // 2 root = TreeNode(nums[mid]) root.left = list_to_bst(nums[:mid]) root.right = list_to_bst(nums[mid+1:]) return root def bst_to_list(root, result): if root: bst_to_list(root.left, result) result.append(root.value) bst_to_list(root.right, result) def bst_list(nums): root = list_to_bst(nums) result = [] bst_to_list(root, result) return result ``` 使用示例: ```python nums = [1, 2, 3, 4, 5] result_tree = list_to_bst(nums) result_list = bst_list(nums) print(result_tree) # 树的形式输出 print(result_list) # 数组形式输出 ``` 以上代码中,输入的整数列表为[1, 2, 3, 4, 5],转换后的树形成为: ``` 3 / \ 2 5 / \ 1 4 ``` 并且以数组形式返回为[1, 2, 3, 4, 5]。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值